CodeIgniter একটি MVC ফ্রেমওয়ার্ক, যা সাধারণভাবে PHP ফাইলের মধ্যে HTML কোড অন্তর্ভুক্ত করে ভিউ (views) তৈরি করে। তবে, কিছু ডেভেলপারদের জন্য টেমপ্লেট ইঞ্জিন ব্যবহার করা অনেক সুবিধাজনক হতে পারে। টেমপ্লেট ইঞ্জিনগুলি HTML এবং PHP কোডের মধ্যে অর্গানাইজেশন এবং পুনরায় ব্যবহারযোগ্যতা উন্নত করতে সাহায্য করে।
এই গাইডে, আমরা দেখব কিভাবে CodeIgniter এর মধ্যে জনপ্রিয় টেমপ্লেট ইঞ্জিন Twig অথবা Blade ইন্টিগ্রেট করা যায়।
Twig হলো একটি অত্যন্ত জনপ্রিয় টেমপ্লেট ইঞ্জিন, যা সঠিকভাবে ডেটা এবং HTML কনটেন্ট আলাদা করতে সহায়ক। CodeIgniter এ Twig ইন্টিগ্রেট করার জন্য, আপনাকে কয়েকটি ধাপ অনুসরণ করতে হবে।
Composer ব্যবহার করে Twig ইন্সটল করা সবচেয়ে সহজ উপায়। Composer আপনার প্রকল্পে Twig প্যাকেজটিকে অ্যাড করবে এবং সমস্ত নির্ভরতা (dependencies) ম্যানেজ করবে।
Twig ইন্সটল করার জন্য নিম্নলিখিত কমান্ডটি চালান:
composer require "twig/twig:^3.0"
Twig লাইব্রেরিটি CodeIgniter-এ ইনক্লুড করতে, আপনাকে একটি কাস্টম লাইব্রেরি তৈরি করতে হবে।
app/Libraries
ফোল্ডারে একটি নতুন PHP ক্লাস তৈরি করুন, যেটি Twig ইনস্ট্যান্স চালাবে।TwigLibrary.php নামক একটি ফাইল তৈরি করুন:
<?php
namespace App\Libraries;
use Twig\Environment;
use Twig\Loader\FilesystemLoader;
class TwigLibrary
{
protected $twig;
public function __construct()
{
// Twig এর ফাইল লোডার সেটআপ
$loader = new FilesystemLoader(APPPATH . 'Views');
$this->twig = new Environment($loader, [
'cache' => WRITEPATH . 'cache/twig',
'auto_reload' => true, // স্বয়ংক্রিয়ভাবে টেমপ্লেট রিফ্রেশ
]);
}
public function render($template, $data = [])
{
return $this->twig->render($template, $data);
}
}
Autoloading: আপনার লাইব্রেরিটি অটোলোড করার জন্য app/Config/Autoload.php
ফাইলে এই লাইব্রেরিটি যোগ করুন:
public $libraries = ['TwigLibrary'];
এখন, আপনি Twig টেমপ্লেট ব্যবহার করতে পারবেন। আপনার কন্ট্রোলারে টেমপ্লেট রেন্ডার করার জন্য এই লাইব্রেরিটি ব্যবহার করুন।
Controller ফাইল তৈরি করুন:
<?php
namespace App\Controllers;
use App\Libraries\TwigLibrary;
class Home extends BaseController
{
public function index()
{
$data = [
'title' => 'Welcome to CodeIgniter with Twig',
'message' => 'This is rendered with Twig Template Engine!',
];
// Twig টেমপ্লেট রেন্ডারিং
$twig = new TwigLibrary();
return $twig->render('home.twig', $data);
}
}
Views ফোল্ডারে home.twig নামক একটি Twig টেমপ্লেট তৈরি করুন:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ title }}</title>
</head>
<body>
<h1>{{ message }}</h1>
</body>
</html>
app/Config/Routes.php
ফাইলে নতুন রাউট যোগ করুন:
$routes->get('/', 'Home::index');
Blade হলো Laravel ফ্রেমওয়ার্কের ডিফল্ট টেমপ্লেট ইঞ্জিন, যা খুবই শক্তিশালী এবং ইউজার-ফ্রেন্ডলি। Blade এর সাহায্যে আপনি CodeIgniter-এ HTML, PHP এবং ডেটার মিশ্রণ খুব সহজে পরিচালনা করতে পারবেন।
Composer ব্যবহার করে Blade ইন্সটল করুন:
composer require jenssegers/blade
CodeIgniter-এ Blade ইন্টিগ্রেট করতে, একটি কাস্টম লাইব্রেরি তৈরি করতে হবে।
app/Libraries/Blade.php
ফাইল তৈরি করুন:
<?php
namespace App\Libraries;
use Jenssegers\Blade\Blade;
class BladeLibrary
{
protected $blade;
public function __construct()
{
$views = APPPATH . 'Views';
$cache = WRITEPATH . 'cache/blade';
$this->blade = new Blade($views, $cache);
}
public function render($template, $data = [])
{
return $this->blade->make($template, $data)->render();
}
}
Autoloading: app/Config/Autoload.php
ফাইলে Blade লাইব্রেরিটি যোগ করুন:
public $libraries = ['BladeLibrary'];
Blade টেমপ্লেট ব্যবহার করতে কন্ট্রোলার এবং ভিউ তৈরি করুন।
Controller ফাইল:
<?php
namespace App\Controllers;
use App\Libraries\BladeLibrary;
class Home extends BaseController
{
public function index()
{
$data = [
'title' => 'Welcome to CodeIgniter with Blade',
'message' => 'This is rendered with Blade Template Engine!',
];
// Blade টেমপ্লেট রেন্ডারিং
$blade = new BladeLibrary();
return $blade->render('home', $data);
}
}
Views ফোল্ডারে home.blade.php নামক একটি Blade টেমপ্লেট তৈরি করুন:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ $title }}</title>
</head>
<body>
<h1>{{ $message }}</h1>
</body>
</html>
উপরের ধাপগুলি অনুসরণ করে আপনি CodeIgniter-এ Twig বা Blade টেমপ্লেট ইঞ্জিন ইন্টিগ্রেট করতে পারেন, যা আপনার অ্যাপ্লিকেশনটির কোডের সংগঠন এবং রক্ষণাবেক্ষণ আরও সহজ করবে।
CodeIgniter ডিফল্টভাবে PHP Views ব্যবহার করে, তবে কিছু ডেভেলপার বিশেষত Blade (Laravel-এ ব্যবহৃত) বা Twig (Symfony-তে ব্যবহৃত) মত টেমপ্লেট ইঞ্জিন ব্যবহার করতে prefer করেন। এগুলো আরও শক্তিশালী এবং সহজ syntax সরবরাহ করে, যা ভিউ টেমপ্লেট লেখার কাজকে আরও সুবিধাজনক এবং পরিষ্কার করে তোলে।
এখানে Blade এবং Twig টেমপ্লেট ইঞ্জিনের সাথে CodeIgniter ইন্টিগ্রেট করার প্রক্রিয়া আলোচনা করা হয়েছে।
Blade একটি পপুলার টেমপ্লেট ইঞ্জিন যা Laravel ফ্রেমওয়ার্কে ব্যবহৃত হয়, তবে আপনি এটি CodeIgniter-এর সাথে ইন্টিগ্রেটও করতে পারেন। Blade ব্যবহারের জন্য আমাদের কিছু অতিরিক্ত লাইব্রেরি ইন্সটল করতে হবে।
CodeIgniter-এ Blade টেমপ্লেট ইঞ্জিন ইন্টিগ্রেট করার জন্য আপনাকে একটি Blade লাইব্রেরি ইনস্টল করতে হবে। এখানে আমরা eftec/bladeone
লাইব্রেরিটি ব্যবহার করব, যা Blade ইঞ্জিনের একটি PHP ভার্সন।
composer require eftec/bladeone
এটি ইন্সটল করার পর, Blade টেমপ্লেট ইঞ্জিন CodeIgniter-এ ব্যবহার করার জন্য নিচে দেখানো নির্দেশাবলী অনুসরণ করুন।
app/Libraries/Blade.php
ফাইল তৈরি করুন এবং BladeOne লাইব্রেরি সেটআপ করুন:
<?php
namespace App\Libraries;
use eftec\bladeone\BladeOne;
class Blade {
protected $blade;
public function __construct() {
$views = APPPATH . 'Views'; // Blade টেমপ্লেটের লোকেশন
$cache = WRITEPATH . 'cache'; // ক্যাশ লোকেশন
$this->blade = new BladeOne($views, $cache, BladeOne::MODE_AUTO);
}
public function view($view, $data = []) {
return $this->blade->run($view, $data);
}
}
Controller-এ Blade টেমপ্লেট ব্যবহার করতে হবে।
<?php
namespace App\Controllers;
use App\Libraries\Blade;
class Home extends BaseController {
public function index() {
$blade = new Blade();
// Blade টেমপ্লেট এবং ডেটা পাঠানো
return $blade->view('welcome', ['name' => 'John Doe']);
}
}
app/Views/welcome.blade.php
ফাইলে Blade টেমপ্লেট তৈরি করুন।
<!DOCTYPE html>
<html>
<head>
<title>Welcome</title>
</head>
<body>
<h1>Hello, {{ $name }}!</h1>
</body>
</html>
Twig একটি শক্তিশালী এবং জনপ্রিয় টেমপ্লেট ইঞ্জিন যা Symfony এবং অন্যান্য PHP ফ্রেমওয়ার্কে ব্যবহৃত হয়। এটি দ্রুত এবং পরিষ্কার টেমপ্লেট লেখা সহ অনেক শক্তিশালী ফিচার সরবরাহ করে।
Twig ইন্সটল করতে আপনাকে Composer ব্যবহার করতে হবে।
composer require "twig/twig:^3.0"
app/Libraries/Twig.php
ফাইল তৈরি করুন এবং Twig লাইব্রেরি সেটআপ করুন:
<?php
namespace App\Libraries;
use Twig\Environment;
use Twig\Loader\FilesystemLoader;
class Twig {
protected $twig;
public function __construct() {
$loader = new FilesystemLoader(APPPATH . 'Views'); // Views ডিরেক্টরি
$this->twig = new Environment($loader, [
'cache' => WRITEPATH . 'cache', // ক্যাশ ডিরেক্টরি
'auto_reload' => true,
]);
}
public function view($view, $data = []) {
echo $this->twig->render($view . '.twig', $data);
}
}
Controller-এ Twig টেমপ্লেট ব্যবহার করতে:
<?php
namespace App\Controllers;
use App\Libraries\Twig;
class Home extends BaseController {
public function index() {
$twig = new Twig();
// Twig টেমপ্লেট এবং ডেটা পাঠানো
return $twig->view('welcome', ['name' => 'John Doe']);
}
}
app/Views/welcome.twig
ফাইলে Twig টেমপ্লেট তৈরি করুন।
<!DOCTYPE html>
<html>
<head>
<title>Welcome</title>
</head>
<body>
<h1>Hello, {{ name }}!</h1>
</body>
</html>
Blade এবং Twig দুটি শক্তিশালী টেমপ্লেট ইঞ্জিন, যা CodeIgniter-এ সহজেই ইন্টিগ্রেট করা যায়। আপনি Blade বা Twig ব্যবহার করতে পারেন, এবং এতে ফাইলের শেয়ারিং, লুপ, কন্ডিশন, ইনক্লুডিং ইত্যাদি অপারেশনগুলি দ্রুত এবং সহজভাবে করা সম্ভব। Blade এবং Twig ইঞ্জিন ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনকে আরও পরিষ্কার, সহজ এবং মডুলারভাবে তৈরি করতে পারবেন।
CodeIgniter একটি MVC (Model-View-Controller) ফ্রেমওয়ার্ক, যেখানে View অংশটি সাধারণত HTML কন্টেন্ট প্রদর্শন করে। তবে, অধিক জটিল অ্যাপ্লিকেশনগুলোর জন্য, আপনি একটি টেমপ্লেট ইঞ্জিন ব্যবহার করে dynamic content rendering করতে পারেন, যা আপনার কোড এবং ভিউয়ের মধ্যে পার্থক্য স্পষ্ট করে এবং কোডের রক্ষণাবেক্ষণ সহজ করে তোলে।
CodeIgniter-এর জন্য বিভিন্ন টেমপ্লেট ইঞ্জিন উপলব্ধ, যেমন Twig, Mustache, এবং Blade (যেটি Laravel-এর জন্য ব্যবহৃত হয়)। তবে, এখানে আমরা PHP এর ভিতরে সহজ টেমপ্লেট ইঞ্জিন ব্যবহারের পদ্ধতি দেখাবো, যেখানে ডায়নামিক কনটেন্ট রেন্ডার করা হবে।
CodeIgniter-এ টেমপ্লেট ইঞ্জিন ব্যবহার করতে, প্রথমে আপনাকে টেমপ্লেট ফাইল এবং ডেটা (যা টেমপ্লেটের ভিতরে পাঠানো হবে) তৈরি করতে হবে।
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
class TemplateController extends Controller
{
public function index()
{
$data = [
'title' => 'Welcome to CodeIgniter',
'content' => 'This is the dynamic content rendered through the template engine!',
];
// 'layout' টেমপ্লেটের সাথে ডেটা পাঠানো
echo view('layout', $data);
}
}
এখানে, index()
মেথডটি layout
নামক ভিউ (টেমপ্লেট) রেন্ডার করবে এবং ডাইনামিক ডেটা পাঠাবে। এই ডেটা $title
এবং $content
এর মাধ্যমে টেমপ্লেটে ব্যবহৃত হবে।
এখানে layout.php
একটি সাধারণ টেমপ্লেট, যেখানে ডাইনামিক কন্টেন্ট যোগ করা হবে।
app/Views/layout.php
:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?= esc($title) ?></title>
</head>
<body>
<header>
<h1>Header Section</h1>
<nav>
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Contact</a></li>
</ul>
</nav>
</header>
<main>
<h2><?= esc($content) ?></h2> <!-- Dynamic content -->
</main>
<footer>
<p>Footer Section - <?= date('Y') ?></p>
</footer>
</body>
</html>
এখানে:
<?= esc($title) ?>
: title
ভ্যালু টেমপ্লেটে সন্নিবেশিত হবে, যা কন্ট্রোলার থেকে পাঠানো হয়েছে।<?= esc($content) ?>
: content
ভ্যালু টেমপ্লেটে সন্নিবেশিত হবে, যা কন্ট্রোলার থেকে পাঠানো হয়েছে।এখন, যখন ব্যবহারকারী /templatecontroller
রিকোয়েস্ট করবে, তখন তারা layout.php
টেমপ্লেটের মাধ্যমে ডাইনামিক কন্টেন্ট দেখতে পাবে। টেমপ্লেট ফাইলটি একই সাথে Header, Footer, এবং Main Content প্রদর্শন করবে, যেখানে Dynamic Content content
ডেটা দিয়ে রেন্ডার হবে।
CodeIgniter-এ একটি টেমপ্লেট সিস্টেমে header, footer, এবং sidebar এর মতো বিভিন্ন অংশ আলাদা আলাদা ফাইল হিসেবে ব্যবহার করা যেতে পারে, যা কোড পুনঃব্যবহারযোগ্য এবং রক্ষণাবেক্ষণযোগ্য করে তোলে।
app/Views/header.php
:
<header>
<h1>Welcome to My Website</h1>
<nav>
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Contact</a></li>
</ul>
</nav>
</header>
app/Views/footer.php
:
<footer>
<p>© <?= date('Y') ?> My Website</p>
</footer>
app/Views/content.php
:
<main>
<h2><?= esc($content) ?></h2>
</main>
app/Views/layout.php
:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?= esc($title) ?></title>
</head>
<body>
<?= view('header') ?> <!-- Header Include -->
<?= view('content', $data) ?> <!-- Main Content Include -->
<?= view('footer') ?> <!-- Footer Include -->
</body>
</html>
এখানে:
view('header')
: Header টেমপ্লেট লোড করবে।view('content', $data)
: Main Content টেমপ্লেট লোড করবে এবং $data
প্যারামিটার (যেমন content
) পাঠাবে।view('footer')
: Footer টেমপ্লেট লোড করবে।CodeIgniter নিজে কোনো বিল্ট-ইন টেমপ্লেট ইঞ্জিন প্রদান না করলেও, উপরের পদ্ধতিটি ব্যবহার করে আপনি সহজে টেমপ্লেট ইঞ্জিন তৈরি করতে পারেন। তবে, আপনি চাইলে তৃতীয় পক্ষের টেমপ্লেট ইঞ্জিন (যেমন Twig, Mustache, Blade) ইনস্টল এবং কনফিগার করেও ব্যবহার করতে পারেন।
Blade টেমপ্লেট ইঞ্জিন ব্যবহার করতে চাইলে আপনাকে Composer দিয়ে Blade ইঞ্জিন লাইব্রেরি ইনস্টল করতে হবে। এটি Laravel-এর টেমপ্লেট ইঞ্জিন হলেও CodeIgniter-এ ব্যবহার করা যায়।
composer require jenssegers/blade
use Jenssegers\Blade\Blade;
$blade = new Blade(APPPATH.'Views', WRITEPATH.'cache');
echo $blade->make('template')->with('data', $data);
এভাবে, CodeIgniter-এ টেমপ্লেট ইঞ্জিনের মাধ্যমে ডাইনামিক কন্টেন্ট রেন্ডারিং করা যায়, যা অ্যাপ্লিকেশনের কাঠামোকে পরিষ্কার এবং রক্ষণাবেক্ষণযোগ্য করে তোলে।
টেমপ্লেট ইঞ্জিন হলো একটি প্রযুক্তি যা ডেভেলপারদের ইউজার ইন্টারফেস এবং অ্যাপ্লিকেশনের লজিক আলাদা করতে সাহায্য করে। এতে HTML এবং PHP কোডের মিশ্রণ কমে আসে, ফলে কোড পরিষ্কার ও মেনটেনেবল থাকে। CodeIgniter নিজে একটি ডিফল্ট টেমপ্লেট ইঞ্জিন সরবরাহ না করলেও, আপনি সহজেই বিভিন্ন থার্ড-পার্টি টেমপ্লেট ইঞ্জিন ব্যবহার করতে পারেন, যেমন Blade, Twig, বা Mustache।
এখানে আমরা আলোচনা করব CodeIgniter-এ টেমপ্লেট ইঞ্জিন ব্যবহারের সুবিধা এবং এর সঠিক ব্যবহার।
CodeIgniter নিজে কোনও ডিফল্ট টেমপ্লেট ইঞ্জিন সরবরাহ না করলেও, আপনি Blade, Twig, বা Mustache এর মতো থার্ড-পার্টি টেমপ্লেট ইঞ্জিনগুলি ইন্টিগ্রেট করতে পারেন। এখানে আমরা Blade টেমপ্লেট ইঞ্জিন ব্যবহারের উদাহরণ দেখব, কারণ এটি Laravel-এর জন্য জনপ্রিয় হলেও, এটি CodeIgniter-এ ব্যবহার করা খুবই সহজ।
Blade ইনস্টল করা: Composer ব্যবহার করে Blade প্যাকেজটি ইন্সটল করুন:
composer require jenssegers/blade
Blade কনফিগারেশন: আপনার CodeIgniter অ্যাপ্লিকেশনে Blade সেটআপ করতে হবে। app/Config/Autoload.php
ফাইলে Composer autoload যোগ করুন:
public $psr4 = [
'Config' => APPPATH . 'Config',
'App' => APPPATH . 'Controllers',
'Jenssegers' => ROOTPATH . 'vendor/jenssegers/blade/src',
];
Blade ইঞ্জিনের জন্য একটি কনফিগারেশন ক্লাস তৈরি করুন, যা app/Libraries/Blade.php
ফোল্ডারে থাকবে।
<?php
namespace App\Libraries;
use Jenssegers\Blade\Blade;
class BladeLoader
{
protected $blade;
protected $viewPath;
protected $cachePath;
public function __construct()
{
$this->viewPath = APPPATH . 'Views'; // ভিউ ফোল্ডার
$this->cachePath = WRITEPATH . 'cache'; // ক্যাশ ফোল্ডার
$this->blade = new Blade($this->viewPath, $this->cachePath);
}
public function render($view, $data = [])
{
echo $this->blade->render($view, $data);
}
}
এখন Blade কনফিগারেশন ক্লাস ব্যবহার করে Controller-এ Blade রেন্ডার করতে পারেন।
<?php
namespace App\Controllers;
use App\Libraries\BladeLoader;
class Home extends BaseController
{
public function index()
{
$blade = new BladeLoader();
// Blade এর মাধ্যমে ভিউ রেন্ডার
$data = ['title' => 'Welcome to CodeIgniter with Blade'];
$blade->render('home', $data);
}
}
app/Views/home.blade.php
ফাইল তৈরি করুন:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ $title }}</title>
</head>
<body>
<h1>{{ $title }}</h1>
</body>
</html>
app/Config/Routes.php
ফাইলে Route সেট করুন:
$routes->get('/', 'Home::index');
CodeIgniter-এ Blade ব্যবহারের বিকল্প হিসাবে Twig এবং Mustache টেমপ্লেট ইঞ্জিনও ব্যবহার করা যায়।
CodeIgniter-এ টেমপ্লেট ইঞ্জিন ব্যবহার করে HTML এবং PHP কোড আলাদা করে রাখা সম্ভব, যা অ্যাপ্লিকেশনকে আরও পরিষ্কার এবং রক্ষণাবেক্ষণযোগ্য করে তোলে। Blade, Twig, বা Mustache ইন্টিগ্রেট করে আপনি কোড পুনঃব্যবহারযোগ্যতা এবং ডাইনামিক কন্টেন্ট রেন্ডারিং করতে পারেন।
Read more